#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
//volatile 关键字：此关键字会告知编译器，
//timeout 变量可能会在意料之外的情况下被修改

//sig_atomic_t 类型的数据能够保证在信号处理函数里以原子操作的方式被访问
volatile sig_atomic_t timeout = 0;

void alarm_handler(int signo) {
    timeout = 1;
}

int main() {
    signal(SIGALRM, alarm_handler);
    alarm(5);  // 设置5秒超时

    char buf[1024];
    printf("请在5秒内输入内容: ");
    fflush(stdout);  // 强制刷新缓冲区，确保输出立即显示

    while (!timeout) {
        if (fgets(buf, sizeof(buf), stdin)) {
            printf("你输入的内容是：%s", buf);
            alarm(0);  // 取消剩余闹钟
            break;
        }
    }

    if (timeout) {
        printf("\n超时！程序退出\n");
    }
    return 0;
}